package com.luxsoft.sw3.contabilidad.model;

import java.math.BigDecimal;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Version;

import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;
import org.springframework.util.Assert;


@Entity
@Table (name="SX_POLIZASDET")
public class PolizaDet {
	
	@Id @GeneratedValue (strategy=GenerationType.AUTO)
	@Column (name="POLIZADET_ID")
	private Long id;
	
	@Version
    private int version;
	
	@ManyToOne(optional = false)
    @JoinColumn(name = "POLIZA_ID"
    	, nullable = false
    	, updatable = false,insertable=false
    	)
    @NotNull
	private Poliza poliza;
	
	@ManyToOne (optional=false)
    @JoinColumn (name="CUENTA_ID", nullable=false) 
    @NotNull
	private CuentaContable cuenta;
	
	@Column(name="DESCRIPCION",nullable=false)
	@NotNull
	@Length(max=255)
	private String descripcion;
	
	@Column(name="REFERENCIA")
	@Length(max=255)
	private String referencia;
	
	@Column(name="REFERENCIA2")
	@Length(max=255)
	private String referencia2;
	
	@Column (name="DEBE",nullable=false,scale=6,precision=16)
	private BigDecimal debe=BigDecimal.ZERO;
	
	@Column (name="HABER",nullable=false,scale=6,precision=16)
	private BigDecimal haber=BigDecimal.ZERO;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Poliza getPoliza() {
		return poliza;
	}

	public void setPoliza(Poliza poliza) {
		this.poliza = poliza;
	}

	public CuentaContable getCuenta() {
		return cuenta;
	}

	public void setCuenta(CuentaContable cuenta) {
		Assert.notNull(cuenta,"La cuenta no puede ser nula");
		Assert.isTrue(cuenta.isDetalle(),"La cuenta no es de detalle");
		this.cuenta = cuenta;
	}

	public BigDecimal getDebe() {
		return debe;
	}

	public void setDebe(BigDecimal debe) {
		this.debe = debe;
	}

	public BigDecimal getHaber() {
		return haber;
	}

	public void setHaber(BigDecimal haber) {
		this.haber = haber;
	}

	public int getVersion() {
		return version;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public String getReferencia() {
		return referencia;
	}

	public void setReferencia(String referencia) {
		this.referencia = referencia;
	}

	public String getReferencia2() {
		return referencia2;
	}

	public void setReferencia2(String referencia2) {
		this.referencia2 = referencia2;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		PolizaDet other = (PolizaDet) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}
	
	

}
